﻿// 并发和多线程.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
//程序运行起来后，生成一个进程，该进程所属的主线程开始自动运行
	//cout << "hellow world" << endl;//这个程序实际是主线程在运行，主线程从main()函数返回，则整个程序执行完毕
	//return 0;
	//主线程从main()函数开始运行，我们创建的线程也需要从一个函数开始运行（初始函数），一旦函数运行完毕，就代表这个线程运行结束
	//整个程序（进程）执行完毕的标志是主线程是否完成执行，如果主线程执行完毕，就代表整个进程执行完毕。
	//此时，一般情况下：如果其它子线程没有执行完毕，那么也会被操作系统强行终止。
	//一般情况下，如果保证子线程（用自己代码创立的线程）的运行状态，就让主线程一直保持运行。

	//怎么要写多线程程序
	//1）首先包含thread头文件
	//2)初始函数要写
	//3)main函数中写代码
#include <iostream>
#include <stdio.h>
#include <thread>
using namespace std;
void myprint()
{
	cout << "我的线程开始了" << endl;
	//...
	//...
	cout << "我的线程结束了" << endl;
}

int main()//这个是有两个线在走，相当于程序两条线平行在走，分别走，主线中创建出另一条副线，并且二者在同时走，即使一条被堵，另一条也会继续走下去。
{
	thread mytobj(myprint);  //thread是一个标准库类，1.创建线程（线程起点为myprint())，2.线程开始执行，其中myprint作为实参来构造这个线程，可调用对象
	//阻塞主线程并等待子线程，
	mytobj.join();//join加入、会和，说白了就是阻塞主线程，让主线程等待子线程执行完毕，让主线程等待子线程执行完毕，然后汇合，也就是等待子线程结束完，主线程就继续走
	cout << "I have a apple!" << endl;
	return 0;
}

